package com.yang.controller;

import com.yang.dao.NoteUserDao;
import com.yang.entity.NoteRole;
import com.yang.entity.NoteUser;
import com.yang.entity.PageInfo;
import com.yang.entity.UserNoteInfo;
import com.yang.service.NoteRoleService;
import com.yang.service.UserNoteInfoService;
import com.yang.utils.info.NoteResponseInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * @author yangdacheng
 * @title: SuperAdminController 超级管理员控制界面
 * @projectName note_api
 * @description: TODO
 * @date 2022/3/14 6:53 下午
 */
@RestController
@Slf4j
@RequestMapping("superAdmin")
public class SuperAdminController {
    @Resource
    private NoteUserDao noteUserDao;
    @Resource
    private NoteRoleService roleService;
    @Resource
    private UserNoteInfoService userNoteInfoService;

    /**
     * 超级管理员获取所有的用户
     * @return
     */
    @GetMapping("queryAllUser")
    private NoteResponseInfo queryAllUser(){
        log.info("获取所有用户");
        List<NoteUser> noteUsers = noteUserDao.superAdminQueryAll();
        NoteResponseInfo noteResponseInfo = new NoteResponseInfo();
        //用户信息不为空
        if (!noteUsers.isEmpty()){
            noteUsers.forEach((value)->{
                value.setUserRole(value.getNoteRole().getRoleName()); //设置用户角色
                if (value.getUserTel().length()>0)
                    value.setUserTel(value.getUserTel().substring(3)); //去除+86
            });
            return noteResponseInfo.setNoteCode(200).setNoteMessage("获取用户信息成功").setNoteClass(noteUsers);
        }
        return noteResponseInfo.setNoteMessage("应用还没有用户～").setNoteCode(4041);
    }

    /**
     * 分页获取用户信息
     * @return
     */
    @PostMapping("/queryByPage")
    private NoteResponseInfo queryUserByPage(PageInfo pageInfo){
        log.info("页面信息："+pageInfo);
        List<NoteUser> noteUsers = noteUserDao.superAdminQueryUserByPage(pageInfo);
        NoteResponseInfo noteResponseInfo = new NoteResponseInfo();
        //用户信息不为空
        if (!noteUsers.isEmpty()){
            noteUsers.forEach((value)->{
                value.setUserRole(value.getNoteRole().getRoleName()); //设置用户角色
                if (value.getUserTel().length()>0)
                    value.setUserTel(value.getUserTel().substring(3)); //去除+86
            });
            return noteResponseInfo.setNoteCode(200).setNoteMessage("获取用户信息成功").setNoteClass(noteUsers);
        }
        return noteResponseInfo.setNoteMessage("应用还没有用户～").setNoteCode(4041);
    }

    /**
     * 获取所有的用户角色
     * @return
     */
    @GetMapping("queryAllRole")
    private NoteResponseInfo getAllRole() {
        NoteResponseInfo noteResponseInfo = new NoteResponseInfo();
        List<NoteRole> noteRoles = roleService.queryAllNoteRole();
        //如果有角色
        if (!noteRoles.isEmpty()){
            return noteResponseInfo.setNoteCode(200).setNoteMessage("获取角色信息成功").setNoteClass(noteRoles);
        }
        return noteResponseInfo.setNoteMessage("应用还没有用户～").setNoteCode(4042);
    }

    /**
     * 修改用户信息
     * @return
     */
    @PutMapping("updUser")
    private NoteResponseInfo updUser(NoteUser noteUser,Integer noteResidue,Boolean passwordCheck){
        log.info("修改用户 73："+noteUser+"\t"+noteResidue+"\t"+passwordCheck);
        if (passwordCheck)
            noteUser.setPassword(new BCryptPasswordEncoder().encode(noteUser.getPassword()));
        NoteResponseInfo noteResponseInfo = new NoteResponseInfo();
        Boolean updUserContext = noteUserDao.updateUser(noteUser); //更新用户信息
        UserNoteInfo userNoteInfo = new UserNoteInfo("",noteUser.getUserid(),noteResidue);
        Boolean updResidues = userNoteInfoService.updateUserNote(userNoteInfo);
        if (updUserContext && updResidues)
            return noteResponseInfo.setNoteCode(200).setNoteMessage("修改用户--"+noteUser.getName()+"信息成功");
        return noteResponseInfo.setNoteMessage("应用还没有用户～").setNoteCode(4042);
    }

    /**
     * 根据邮箱查询用户信息
     * @param email
     * @return
     */
    @GetMapping("queryUserByEmail/{email}")
    private NoteResponseInfo queryUserByEmail(@PathVariable("email") String email){
        NoteResponseInfo noteResponseInfo = new NoteResponseInfo();
        log.info("查询的邮箱为:"+email);
        NoteUser noteUser = noteUserDao.superAdminQueryUserByEmail(email);
        if (noteUser!=null){
            noteResponseInfo.setNoteCode(200).setNoteMessage("查询用户信息成功").setNoteClass(noteUser);
        }else{
            noteResponseInfo.setNoteCode(404).setNoteMessage("未查询到对应的用户信息");
        }
        return noteResponseInfo;
    }
}
